﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FrbaCommerce.Abm_Empresa
{
    public partial class ModificacionEmpresa : Form
    {
        public Int32 empresaAModificar;
        public Gets_and_Sets.Empresa_getset empAnt;
        private Decimal rolUsuarioLogueado;
        private int rolAdministrador = 1;



        public ModificacionEmpresa(Int32 idSelect, int usuarioLogueado)
        {

            InitializeComponent();
            this.empresaAModificar = idSelect;
            this.rolUsuarioLogueado = AccessData.adRol.obtenerRolusuario(usuarioLogueado);

            if (rolUsuarioLogueado == rolAdministrador)
            {
                comboBoxHabilitado.Visible = true;
                labelEstado.Visible = true;
                //completo manualmente el comboboxHabilitado
                comboBoxHabilitado.Items.Add("Deshabilitado");
                comboBoxHabilitado.Items.Add("Habilitado");
                textBoxModContraseña.Visible = true;
                label1.Visible = true;
            }
            else
            {
                comboBoxHabilitado.Visible = false;
                labelEstado.Visible = false;
                textBoxModContraseña.Visible = false;
                label1.Visible = false;
            }


            //completo manualmente el comboboxHabilitado
            cargarDatosDeEmpresaSeleccionada();


        }

        private void cargarDatosDeEmpresaSeleccionada()
        {

            empAnt = AccessData.adEmpresa.buscarEmpresa(empresaAModificar);
            empAnt.Habilitado = AccessData.adUsuario.buscarEstadoUsuario(empresaAModificar);

            textBoxCUIT.Text = empAnt.Cuit;
            textBoxRazonSocial.Text = empAnt.RazonSocial;
            textBoxTel.Text = empAnt.Telefono;
            textBoxFechaCre.Text = Convert.ToString(empAnt.Fecha_Creacion);
            textBoxMail.Text = empAnt.Mail;
            textBoxCiudad.Text = empAnt.Ciudad;
            textBoxCodPostal.Text = empAnt.Cod_Postal;
            textBoxLocalidad.Text = empAnt.Localidad;
            textBoxDomicilio.Text = empAnt.Dom_Calle;
            textBoxNroCalle.Text = Convert.ToString(empAnt.Nro_Calle);
            textBoxPiso.Text = Convert.ToString(empAnt.Piso);
            textBoxDpto.Text = empAnt.Dpto;
            textBoxContacto.Text = empAnt.nbre_contacto;
            if (empAnt.Habilitado.Equals(1))
            {
                labelEstado.Visible = false;
                comboBoxHabilitado.Visible = false;
                comboBoxHabilitado.Text = "Habilitado";
            }
            else
            {
                comboBoxHabilitado.Text = "Deshabilitado";
            }

        }


        private void verificarCUITyTelefono()
        {

            if (empAnt.Telefono != textBoxTel.Text)
            {
                //valido que el nuevo telefono no exista en la base
                AccessData.adTelefonos.validarTelefono(textBoxTel.Text);
            }
            if (empAnt.Cuit != textBoxCUIT.Text)
            {
                //valido que el nuevo CUIT no exista en la base
                AccessData.adNroDoc.validarCUIT(textBoxCUIT.Text);
            }
        }



        private void validarTipoDeDatosIngresados()
        {

            Codigo_reutilizable.Validaciones.ValidarTipoNroCalle(textBoxNroCalle.Text);

            if (!string.IsNullOrEmpty(textBoxPiso.Text))
            {
                Codigo_reutilizable.Validaciones.ValidarTipoPiso(textBoxPiso.Text);
            }
        }







        private void buttonLimpiar_Click(object sender, EventArgs e)
        {
            Codigo_reutilizable.Limpiar.LimpiarText(this);
            Codigo_reutilizable.Limpiar.LimpiarMaskedTextBox(this);
            Codigo_reutilizable.Limpiar.BlanquearControles(this);
        }






        private void buttonGuardar_Click(object sender, EventArgs e)
        {

            Gets_and_Sets.Empresa_getset empresaModificada = new Gets_and_Sets.Empresa_getset();

            try
            {
                //----------------------------
                //VALIDACIONES EN LOS CAMPOS
                //----------------------------

                //Verifica si los otros datos ademas del telefono y la fecha ingresados no son nulos
                Codigo_reutilizable.Validaciones.NulidadDeDatosIngresados(this, textBoxTel);
                //verifico que la fecha y el telefono no sean nulos
                Codigo_reutilizable.Validaciones.validarTelyFechaNulos(textBoxFechaCre, textBoxTel);


                //primero valido el CUIT.
                string cuit = textBoxCUIT.Text;
                char[] valoresValidosCUIT = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-' };
                string caracteresNoValidos = cuit.TrimStart(valoresValidosCUIT);
                if (caracteresNoValidos == "")
                {

                    //Verifica si lo que se estan ingresando es correcto
                    validarTipoDeDatosIngresados();

                    //Verifica si la fecha está dentro del limite
                    Codigo_reutilizable.Validaciones.ValidarFecha(textBoxFechaCre.Text);

                    //Verifica si el DNI y Telefono ya no existen
                    verificarCUITyTelefono(); //se fija si no es igual al que ingreso antes y no lo cambia

                    //Inicializa el cliente con datos correctos
                    inicializarEmpresa(empresaModificada);



                    AccessData.adEmpresa.ActualizarEmpresa(empresaModificada, empresaAModificar);
                    if (comboBoxHabilitado.Visible == true)
                    {
                        AccessData.adUsuario.ActualizarEstadoUsuario(empresaModificada, empresaAModificar);
                    }
                    if (textBoxModContraseña.Text != "")
                    {
                        AccessData.adUsuario.ActualizarContraseñaUsuario(empresaModificada, empresaAModificar);
                    }

                    this.Close();


                }
                else
                {
                    MessageBox.Show("El CUIT contiene caracteres no válidos, ejemplo CUIT: 99-99999999-99", "Error campo CUIT", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }






        private void inicializarEmpresa(Gets_and_Sets.Empresa_getset emp)
        {


            emp.Cuit = textBoxCUIT.Text;
            emp.RazonSocial = textBoxRazonSocial.Text;
            emp.Telefono = textBoxTel.Text;
            emp.Fecha_Creacion = textBoxFechaCre.Text;
            emp.Mail = Convert.ToString(textBoxMail.Text);
            emp.Ciudad = textBoxCiudad.Text;
            emp.Cod_Postal = Convert.ToString(textBoxCodPostal.Text);
            emp.Localidad = Convert.ToString(textBoxLocalidad.Text);
            emp.Dom_Calle = Convert.ToString(textBoxDomicilio.Text);
            emp.Nro_Calle = Convert.ToInt32(textBoxNroCalle.Text);

            emp.nbre_contacto = textBoxContacto.Text;
            
            
            if (Convert.ToString(comboBoxHabilitado.SelectedItem) == "Habilitado")
            {
                emp.Habilitado = 1;
            }
            else
            {
                emp.Habilitado = 0;
            }

            //asigno la contraseña modificada (el filtro de si esta cambiada lo hago despues)
            Codigo_reutilizable.PasswordHash password = new Codigo_reutilizable.PasswordHash();
            emp.Contraseña = password.SHA256Encrypt(textBoxModContraseña.Text);

            //hace esto para que pueda existir gente que no vive en edificio
            if (!string.IsNullOrEmpty(textBoxPiso.Text))
            {
                emp.Piso = Convert.ToInt32(textBoxPiso.Text);
            }

            if (!string.IsNullOrEmpty(textBoxDpto.Text))
            {
                emp.Dpto = Convert.ToString(textBoxDpto.Text);
            }



        }



    }
}
